package pimmodel;

import java.io.Serializable;

/**
 * 
 * Interface ITelefonnr:<br>
 * Das Interface zur Klasse Telefonnr.
 * 
 * @author Thomas Schoenfeld
 * @version (20120909_01)
 *
 */
public interface ITelefonnr extends Cloneable, Comparable<ITelefonnr>, Serializable {

	/**
	 * getTelefontyp		gibt den Telefontyp zurueck
	 * 
	 * @return				der Typ des erfassten Telefons
	 */
	public abstract String getTelefontyp();

	/**
	 * setTelefontyp		setzt / aendert den Typ des Telefoneintrags
	 * 
	 * @param	telefontyp	der Telefontyp, z.B. Festnetz1, Festnetz2, Mobil1, Mobil2, Fax1, ...
	 * 
	 * @throws	IllegalArgumentException falls kein gueltiger String uebergeben wurde			
	 */
	public abstract void setTelefontyp(String telefontyp);

	/**
	 * getTelefonnr			gibt die Telefonnummer zurueck
	 * 
	 * @return				die erfasste Telefonnummer
	 */
	public abstract String getTelefonnr();

	/**
	 * setTelefonnr			setzt / aendert die Telefonnummer
	 * 
	 * @param	telefonnr	die Telefonnummer
	 * 
	 * @throws	IllegalArgumentException falls kein gueltiger String uebergeben wurde			
	 */
	public abstract void setTelefonnr(String telefonnr);

	/**
	 * toString				liefert Objektbeschreibung als String zurueck
	 * 
	 * @return				die Objektbeschreibung als String
	 * 
	 * @overrides			toString()
	 */
	public abstract String toString();

	/**
	 * hashCode				liefert den Hashcode des Objekts als Integer zurueck
	 * 
	 * @return				den Hashcode des Objekts
	 * 
	 * @overrides			hashCode()
	 */
	public abstract int hashCode();

	/**
	 * equals				untersucht das Objekt mit einem uebergebenen Objekt auf Gleichheit
	 * 
	 * @param	objekt		das mit diesem Objekt zu vergleichende Objekt
	 * 
	 * @return				true bei Gleichheit, sonst false
	 * 
	 * @overrides			equals()
	 */
	public abstract boolean equals(Object objekt);
	
	/**
	 * clone				erzeugt und liefert tiefe Kopie dieses Objekts
	 * 
	 * @return				tiefe Kopie des Objekts
	 */
	public abstract ITelefonnr clone();

	/**
	 * compareTo			vergleicht den Telefoneintrag mit dem uebergebenen Telefoneintrag
	 * 
	 * @param	telnr		der mit diesem Telefoneintrag zu vergleichende Telefoneintrag
	 * 
	 * @return				-1, falls a) der Typ und b) die Telefonnummer dieses Eintrags lexikographisch kleiner,<br>
	 * 						 1, falls er groesser bzw.<br>
	 * 						 0, falls er gleich dem uebergebenen Eintrag ist
	 * 
	 * @throws	IllegalArgumentException falls kein gueltiges Objekt vom Typ ITelefonnr uebergeben wurde
	 */
	public abstract int compareTo(ITelefonnr telnr);

}